home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Developers / MW MPW Binaries 1.1.1a2 / mwcPPC / MWCIncludes / Sound.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-31  |  23.3 KB  |  755 lines  |  [TEXT/MMCC]

  1. /*
  2.     File:        Sound.h
  3.  
  4.     Copyright:    © 1984-1993 by Apple Computer, Inc., all rights reserved.
  5.  
  6.     WARNING
  7.     This file was auto generated by the interfacer tool. Modifications
  8.     must be made to the master file.
  9.  
  10. */
  11.  
  12. #ifndef __SOUND__
  13. #define __SOUND__
  14.  
  15. #ifndef __TYPES__
  16. #include <Types.h>
  17. /*    #include <ConditionalMacros.h>                                */
  18. /*    #include <MixedMode.h>                                        */
  19. /*        #include <Traps.h>                                        */
  20. #endif
  21.  
  22. #define soundListRsrc 'snd '
  23.  
  24. #define kSoundHardwareType 'sdev'
  25.  
  26. #define twelfthRootTwo 1.05946309434
  27.  
  28. enum  {
  29.     swMode                        = -1,                            /*Sound Driver modes*/
  30.     ftMode                        = 1,
  31.     ffMode                        = 0,
  32.     rate44khz                    = (long)0xAC440000,                /*44100.00000 in fixed-point*/
  33.     rate22khz                    = (long)0x56EE8BA3,                /*22254.54545 in fixed-point*/
  34.     rate11khz                    = (long)0x2B7745D1,                /*11127.27273 in fixed-point*/
  35. /*synthesizer numbers for SndNewChannel*/
  36.     squareWaveSynth                = 1,                            /*square wave synthesizer*/
  37.     waveTableSynth                = 3,                            /*wave table synthesizer*/
  38.     sampledSynth                = 5,                            /*sampled sound synthesizer*/
  39. /*old Sound Manager MACE synthesizer numbers*/
  40.     MACE3snthID                    = 11,
  41.     MACE6snthID                    = 13,
  42.     kMiddleC                    = 60,                            /*MIDI note value for middle C*/
  43.     kSimpleBeepID                = 1,                            /*reserved resource ID for Simple Beep*/
  44.     kFullVolume                    = 0x0100,                        /*1.0, setting for full hardware output volume*/
  45.     kNoVolume                    = 0,                            /*setting for no sound volume*/
  46. /*command numbers for SndDoCommand and SndDoImmediate*/
  47.     nullCmd                        = 0,
  48.     initCmd                        = 1,
  49.     freeCmd                        = 2,
  50.     quietCmd                    = 3,
  51.     flushCmd                    = 4,
  52.     reInitCmd                    = 5,
  53.     waitCmd                        = 10,
  54.     pauseCmd                    = 11,
  55.     resumeCmd                    = 12,
  56.     callBackCmd                    = 13
  57. };
  58.  
  59. enum  {
  60.     syncCmd                        = 14,
  61.     availableCmd                = 24,
  62.     versionCmd                    = 25,
  63.     totalLoadCmd                = 26,
  64.     loadCmd                        = 27,
  65.     freqDurationCmd                = 40,
  66.     restCmd                        = 41,
  67.     freqCmd                        = 42,
  68.     ampCmd                        = 43,
  69.     timbreCmd                    = 44,
  70.     getAmpCmd                    = 45,
  71.     volumeCmd                    = 46,                            /*sound manager 3.0 or later only*/
  72.     getVolumeCmd                = 47,                            /*sound manager 3.0 or later only*/
  73.     waveTableCmd                = 60,
  74.     phaseCmd                    = 61
  75. };
  76.  
  77. enum  {
  78.     soundCmd                    = 80,
  79.     bufferCmd                    = 81,
  80.     rateCmd                        = 82,
  81.     continueCmd                    = 83,
  82.     doubleBufferCmd                = 84,
  83.     getRateCmd                    = 85,
  84.     sizeCmd                        = 90,
  85.     convertCmd                    = 91,
  86.     stdQLength                    = 128,
  87.     dataOffsetFlag                = 0x8000,
  88. /*channel initialization parameters*/
  89.     waveInitChannelMask            = 0x07,
  90.     waveInitChannel0            = 0x04,                            /*wave table only, Sound Manager 2.0 and earlier*/
  91.     waveInitChannel1            = 0x05,                            /*wave table only, Sound Manager 2.0 and earlier*/
  92.     waveInitChannel2            = 0x06,                            /*wave table only, Sound Manager 2.0 and earlier*/
  93.     waveInitChannel3            = 0x07,                            /*wave table only, Sound Manager 2.0 and earlier*/
  94.     initChan0                    = waveInitChannel0,                /*obsolete spelling*/
  95.     initChan1                    = waveInitChannel1,                /*obsolete spelling*/
  96.     initChan2                    = waveInitChannel2,                /*obsolete spelling*/
  97.     initChan3                    = waveInitChannel3,                /*obsolete spelling*/
  98.     initPanMask                    = 0x0003,                        /*mask for right/left pan values*/
  99.     initSRateMask                = 0x0030,                        /*mask for sample rate values*/
  100.     initStereoMask                = 0x00C0,                        /*mask for mono/stereo values*/
  101.     initCompMask                = 0xFF00                        /*mask for compression IDs*/
  102. };
  103.  
  104. enum  {
  105.     initChanLeft                = 0x0002,                        /*left stereo channel*/
  106.     initChanRight                = 0x0003,                        /*right stereo channel*/
  107.     initNoInterp                = 0x0004,                        /*no linear interpolation*/
  108.     initNoDrop                    = 0x0008,                        /*no drop-sample conversion*/
  109.     initMono                    = 0x0080,                        /*monophonic channel*/
  110.     initStereo                    = 0x00C0,                        /*stereo channel*/
  111.     initMACE3                    = 0x0300,                        /*MACE 3:1*/
  112.     initMACE6                    = 0x0400,                        /*MACE 6:1*/
  113.     kUseOptionalOutputDevice    = -1,                            /*only for Sound Manager 3.0 or later*/
  114.     stdSH                        = 0x00,                            /*Standard sound header encode value*/
  115.     extSH                        = 0xFF,                            /*Extended sound header encode value*/
  116.     cmpSH                        = 0xFE,                            /*Compressed sound header encode value*/
  117.     notCompressed                = 0,                            /*compression ID's*/
  118.     fixedCompression            = -1,                            /*compression ID for fixed-sized compression*/
  119.     variableCompression            = -2,                            /*compression ID for variable-sized compression*/
  120.     twoToOne                    = 1,
  121.     eightToThree                = 2,
  122.     threeToOne                    = 3,
  123.     sixToOne                    = 4,
  124.     outsideCmpSH                = 0                                /*MACE constants*/
  125. };
  126.  
  127. enum  {
  128.     insideCmpSH                    = 1,
  129.     aceSuccess                    = 0,
  130.     aceMemFull                    = 1,
  131.     aceNilBlock                    = 2,
  132.     aceBadComp                    = 3,
  133.     aceBadEncode                = 4,
  134.     aceBadDest                    = 5,
  135.     aceBadCmd                    = 6,
  136.     sixToOnePacketSize            = 8,
  137.     threeToOnePacketSize        = 16,
  138.     stateBlockSize                = 64,
  139.     leftOverBlockSize            = 32,
  140.     firstSoundFormat            = 0x0001,                        /*general sound format*/
  141.     secondSoundFormat            = 0x0002,                        /*special sampled sound format (HyperCard)*/
  142.     dbBufferReady                = 0x00000001,                    /*double buffer is filled*/
  143.     dbLastBuffer                = 0x00000004,                    /*last double buffer to play*/
  144.     sysBeepDisable                = 0x0000,                        /*SysBeep() enable flags*/
  145.     sysBeepEnable                = 0x0001,
  146.     unitTypeNoSelection            = 0xFFFF,                        /*unitTypes for AudioSelection.unitType*/
  147.     unitTypeSeconds                = 0x0000
  148. };
  149.  
  150.  
  151. /*Structures for Sound Driver*/
  152.  
  153. typedef unsigned char FreeWave[30001];
  154.  
  155. #if defined(powerc) || defined (__powerc)
  156. #pragma options align=mac68k
  157. #endif
  158. struct FFSynthRec {
  159.     short                        mode;
  160.     Fixed                        count;
  161.     FreeWave                    waveBytes;
  162. };
  163. #if defined(powerc) || defined(__powerc)
  164. #pragma options align=reset
  165. #endif
  166.  
  167. typedef struct FFSynthRec FFSynthRec;
  168.  
  169. typedef FFSynthRec *FFSynthPtr;
  170.  
  171. #if defined(powerc) || defined (__powerc)
  172. #pragma options align=mac68k
  173. #endif
  174. struct Tone {
  175.     short                        count;
  176.     short                        amplitude;
  177.     short                        duration;
  178. };
  179. #if defined(powerc) || defined(__powerc)
  180. #pragma options align=reset
  181. #endif
  182.  
  183. typedef struct Tone Tone;
  184.  
  185. typedef Tone Tones[5001];
  186.  
  187. #if defined(powerc) || defined (__powerc)
  188. #pragma options align=mac68k
  189. #endif
  190. struct SWSynthRec {
  191.     short                        mode;
  192.     Tones                        triplets;
  193. };
  194. #if defined(powerc) || defined(__powerc)
  195. #pragma options align=reset
  196. #endif
  197.  
  198. typedef struct SWSynthRec SWSynthRec;
  199.  
  200. typedef SWSynthRec *SWSynthPtr;
  201.  
  202. typedef unsigned char Wave[256];
  203.  
  204. typedef Wave *WavePtr;
  205.  
  206. #if defined(powerc) || defined (__powerc)
  207. #pragma options align=mac68k
  208. #endif
  209. struct FTSoundRec {
  210.     short                        duration;
  211.     Fixed                        sound1Rate;
  212.     long                        sound1Phase;
  213.     Fixed                        sound2Rate;
  214.     long                        sound2Phase;
  215.     Fixed                        sound3Rate;
  216.     long                        sound3Phase;
  217.     Fixed                        sound4Rate;
  218.     long                        sound4Phase;
  219.     WavePtr                        sound1Wave;
  220.     WavePtr                        sound2Wave;
  221.     WavePtr                        sound3Wave;
  222.     WavePtr                        sound4Wave;
  223. };
  224. #if defined(powerc) || defined(__powerc)
  225. #pragma options align=reset
  226. #endif
  227.  
  228. typedef struct FTSoundRec FTSoundRec;
  229.  
  230. typedef FTSoundRec *FTSndRecPtr;
  231.  
  232. #if defined(powerc) || defined (__powerc)
  233. #pragma options align=mac68k
  234. #endif
  235. struct FTSynthRec {
  236.     short                        mode;
  237.     FTSndRecPtr                    sndRec;
  238. };
  239. #if defined(powerc) || defined(__powerc)
  240. #pragma options align=reset
  241. #endif
  242.  
  243. typedef struct FTSynthRec FTSynthRec;
  244.  
  245. typedef FTSynthRec *FTSynthPtr;
  246.  
  247. typedef pascal void (*SndCompletionProcPtr)(void);
  248.  
  249. enum {
  250.     uppSndCompletionProcInfo = kPascalStackBased
  251. };
  252.  
  253. #if USESROUTINEDESCRIPTORS
  254. typedef UniversalProcPtr SndCompletionUPP;
  255.  
  256. #define CallSndCompletionProc(userRoutine)        \
  257.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSndCompletionProcInfo)
  258. #define NewSndCompletionProc(userRoutine)        \
  259.         (SndCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSndCompletionProcInfo, GetCurrentISA())
  260. #else
  261. typedef SndCompletionProcPtr SndCompletionUPP;
  262.  
  263. #define CallSndCompletionProc(userRoutine)        \
  264.         (*(userRoutine))()
  265. #define NewSndCompletionProc(userRoutine)        \
  266.         (SndCompletionUPP)(userRoutine)
  267. #endif
  268.  
  269.  
  270. /*Structures for Sound Manager*/
  271.  
  272. #if defined(powerc) || defined (__powerc)
  273. #pragma options align=mac68k
  274. #endif
  275. struct SndCommand {
  276.     unsigned short                cmd;
  277.     short                        param1;
  278.     long                        param2;
  279. };
  280. #if defined(powerc) || defined(__powerc)
  281. #pragma options align=reset
  282. #endif
  283.  
  284. typedef struct SndCommand SndCommand;
  285.  
  286. typedef struct SndChannel SndChannel;
  287.  
  288. typedef SndChannel *SndChannelPtr;
  289.  
  290. typedef pascal void (*SndCallBackProcPtr)(SndChannelPtr chan, SndCommand *cmd);
  291.  
  292. enum {
  293.     uppSndCallBackProcInfo = kPascalStackBased
  294.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SndChannelPtr)))
  295.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SndCommand*)))
  296. };
  297.  
  298. #if USESROUTINEDESCRIPTORS
  299. typedef UniversalProcPtr SndCallBackUPP;
  300.  
  301. #define CallSndCallBackProc(userRoutine, chan, cmd)        \
  302.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSndCallBackProcInfo, (chan), (cmd))
  303. #define NewSndCallBackProc(userRoutine)        \
  304.         (SndCallBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSndCallBackProcInfo, GetCurrentISA())
  305. #else
  306. typedef SndCallBackProcPtr SndCallBackUPP;
  307.  
  308. #define CallSndCallBackProc(userRoutine, chan, cmd)        \
  309.         (*(userRoutine))((chan), (cmd))
  310. #define NewSndCallBackProc(userRoutine)        \
  311.         (SndCallBackUPP)(userRoutine)
  312. #endif
  313.  
  314. #if defined(powerc) || defined (__powerc)
  315. #pragma options align=mac68k
  316. #endif
  317. struct SndChannel {
  318.     struct SndChannel            *nextChan;
  319.     Ptr                            firstMod;                        /* reserved for the Sound Manager */
  320.     SndCallBackUPP                callBack;
  321.     long                        userInfo;
  322.     long                        wait;                            /* The following is for internal Sound Manager use only.*/
  323.     SndCommand                    cmdInProgress;
  324.     short                        flags;
  325.     short                        qLength;
  326.     short                        qHead;
  327.     short                        qTail;
  328.     SndCommand                    queue[stdQLength];
  329. };
  330. #if defined(powerc) || defined(__powerc)
  331. #pragma options align=reset
  332. #endif
  333.  
  334.  
  335. /*MACE structures*/
  336.  
  337. #if defined(powerc) || defined (__powerc)
  338. #pragma options align=mac68k
  339. #endif
  340. struct StateBlock {
  341.     short                        stateVar[stateBlockSize];
  342. };
  343. #if defined(powerc) || defined(__powerc)
  344. #pragma options align=reset
  345. #endif
  346.  
  347. typedef struct StateBlock StateBlock;
  348.  
  349. typedef StateBlock *StateBlockPtr;
  350.  
  351. #if defined(powerc) || defined (__powerc)
  352. #pragma options align=mac68k
  353. #endif
  354. struct LeftOverBlock {
  355.     unsigned long                count;
  356.     char                        sampleArea[leftOverBlockSize];
  357. };
  358. #if defined(powerc) || defined(__powerc)
  359. #pragma options align=reset
  360. #endif
  361.  
  362. typedef struct LeftOverBlock LeftOverBlock;
  363.  
  364. typedef LeftOverBlock *LeftOverBlockPtr;
  365.  
  366. #if defined(powerc) || defined (__powerc)
  367. #pragma options align=mac68k
  368. #endif
  369. struct ModRef {
  370.     unsigned short                modNumber;
  371.     long                        modInit;
  372. };
  373. #if defined(powerc) || defined(__powerc)
  374. #pragma options align=reset
  375. #endif
  376.  
  377. typedef struct ModRef ModRef;
  378.  
  379. #if defined(powerc) || defined (__powerc)
  380. #pragma options align=mac68k
  381. #endif
  382. struct SndListResource {
  383.     short                        format;
  384.     short                        numModifiers;
  385.     ModRef                        modifierPart[1];                /*This is a variable length array*/
  386.     short                        numCommands;
  387.     SndCommand                    commandPart[1];                    /*This is a variable length array*/
  388.     char                        dataPart[1];                    /*This is a variable length array*/
  389. };
  390. #if defined(powerc) || defined(__powerc)
  391. #pragma options align=reset
  392. #endif
  393.  
  394. typedef struct SndListResource SndListResource;
  395.  
  396. typedef SndListResource *SndListPtr;
  397.  
  398. typedef SndListPtr *SndListHndl;
  399.  
  400.  
  401. /*HyperCard sound resource format*/
  402.  
  403. #if defined(powerc) || defined (__powerc)
  404. #pragma options align=mac68k
  405. #endif
  406. struct Snd2ListResource {
  407.     short                        format;
  408.     short                        refCount;
  409.     short                        numCommands;
  410.     SndCommand                    commandPart[1];                    /*This is a variable length array*/
  411.     char                        dataPart[1];                    /*This is a variable length array*/
  412. };
  413. #if defined(powerc) || defined(__powerc)
  414. #pragma options align=reset
  415. #endif
  416.  
  417. typedef struct Snd2ListResource Snd2ListResource;
  418.  
  419. typedef Snd2ListResource *Snd2ListPtr;
  420.  
  421. typedef Snd2ListPtr *Snd2ListHndl;
  422.  
  423. #if defined(powerc) || defined (__powerc)
  424. #pragma options align=mac68k
  425. #endif
  426. struct SoundHeader {
  427.     Ptr                            samplePtr;                        /*if NIL then samples are in sampleArea*/
  428.     unsigned long                length;                            /*length of sound in bytes*/
  429.     Fixed                        sampleRate;                        /*sample rate for this sound*/
  430.     unsigned long                loopStart;                        /*start of looping portion*/
  431.     unsigned long                loopEnd;                        /*end of looping portion*/
  432.     unsigned char                encode;                            /*header encoding*/
  433.     unsigned char                baseFrequency;                    /*baseFrequency value*/
  434.     unsigned char                sampleArea[1];                    /*space for when samples follow directly*/
  435. };
  436. #if defined(powerc) || defined(__powerc)
  437. #pragma options align=reset
  438. #endif
  439.  
  440. typedef struct SoundHeader SoundHeader;
  441.  
  442. typedef SoundHeader *SoundHeaderPtr;
  443.  
  444. #if defined(powerc) || defined (__powerc)
  445. #pragma options align=mac68k
  446. #endif
  447. struct CmpSoundHeader {
  448.     Ptr                            samplePtr;                        /*if nil then samples are in sample area*/
  449.     unsigned long                numChannels;                    /*number of channels i.e. mono = 1*/
  450.     Fixed                        sampleRate;                        /*sample rate in Apples Fixed point representation*/
  451.     unsigned long                loopStart;                        /*loopStart of sound before compression*/
  452.     unsigned long                loopEnd;                        /*loopEnd of sound before compression*/
  453.     unsigned char                encode;                            /*data structure used , stdSH, extSH, or cmpSH*/
  454.     unsigned char                baseFrequency;                    /*same meaning as regular SoundHeader*/
  455.     unsigned long                numFrames;                        /*length in frames ( packetFrames or sampleFrames )*/
  456.     extended80                    AIFFSampleRate;                    /*IEEE sample rate*/
  457.     Ptr                            markerChunk;                    /*sync track*/
  458.     OSType                        format;                            /*data format type, was futureUse1*/
  459.     unsigned long                futureUse2;                        /*reserved by Apple*/
  460.     StateBlockPtr                stateVars;                        /*pointer to State Block*/
  461.     LeftOverBlockPtr            leftOverSamples;                /*used to save truncated samples between compression calls*/
  462.     unsigned short                compressionID;                    /*0 means no compression, non zero means compressionID*/
  463.     unsigned short                packetSize;                        /*number of bits in compressed sample packet*/
  464.     unsigned short                snthID;                            /*resource ID of Sound Manager snth that contains NRT C/E*/
  465.     unsigned short                sampleSize;                        /*number of bits in non-compressed sample*/
  466.     unsigned char                sampleArea[1];                    /*space for when samples follow directly*/
  467. };
  468. #if defined(powerc) || defined(__powerc)
  469. #pragma options align=reset
  470. #endif
  471.  
  472. typedef struct CmpSoundHeader CmpSoundHeader;
  473.  
  474. typedef CmpSoundHeader *CmpSoundHeaderPtr;
  475.  
  476. #if defined(powerc) || defined (__powerc)
  477. #pragma options align=mac68k
  478. #endif
  479. struct ExtSoundHeader {
  480.     Ptr                            samplePtr;                        /*if nil then samples are in sample area*/
  481.     unsigned long                numChannels;                    /*number of channels,  ie mono = 1*/
  482.     Fixed                        sampleRate;                        /*sample rate in Apples Fixed point representation*/
  483.     unsigned long                loopStart;                        /*same meaning as regular SoundHeader*/
  484.     unsigned long                loopEnd;                        /*same meaning as regular SoundHeader*/
  485.     unsigned char                encode;                            /*data structure used , stdSH, extSH, or cmpSH*/
  486.     unsigned char                baseFrequency;                    /*same meaning as regular SoundHeader*/
  487.     unsigned long                numFrames;                        /*length in total number of frames*/
  488.     extended80                    AIFFSampleRate;                    /*IEEE sample rate*/
  489.     Ptr                            markerChunk;                    /*sync track*/
  490.     Ptr                            instrumentChunks;                /*AIFF instrument chunks*/
  491.     Ptr                            AESRecording;
  492.     unsigned short                sampleSize;                        /*number of bits in sample*/
  493.     unsigned short                futureUse1;                        /*reserved by Apple*/
  494.     unsigned long                futureUse2;                        /*reserved by Apple*/
  495.     unsigned long                futureUse3;                        /*reserved by Apple*/
  496.     unsigned long                futureUse4;                        /*reserved by Apple*/
  497.     unsigned char                sampleArea[1];                    /*space for when samples follow directly*/
  498. };
  499. #if defined(powerc) || defined(__powerc)
  500. #pragma options align=reset
  501. #endif
  502.  
  503. typedef struct ExtSoundHeader ExtSoundHeader;
  504.  
  505. typedef ExtSoundHeader *ExtSoundHeaderPtr;
  506.  
  507. #if defined(powerc) || defined (__powerc)
  508. #pragma options align=mac68k
  509. #endif
  510. struct ConversionBlock {
  511.     short                        destination;
  512.     short                        unused;
  513.     CmpSoundHeaderPtr            inputPtr;
  514.     CmpSoundHeaderPtr            outputPtr;
  515. };
  516. #if defined(powerc) || defined(__powerc)
  517. #pragma options align=reset
  518. #endif
  519.  
  520. typedef struct ConversionBlock ConversionBlock;
  521.  
  522. typedef ConversionBlock *ConversionBlockPtr;
  523.  
  524. #if defined(powerc) || defined (__powerc)
  525. #pragma options align=mac68k
  526. #endif
  527. struct SMStatus {
  528.     short                        smMaxCPULoad;
  529.     short                        smNumChannels;
  530.     short                        smCurCPULoad;
  531. };
  532. #if defined(powerc) || defined(__powerc)
  533. #pragma options align=reset
  534. #endif
  535.  
  536. typedef struct SMStatus SMStatus;
  537.  
  538. typedef SMStatus *SMStatusPtr;
  539.  
  540. #if defined(powerc) || defined (__powerc)
  541. #pragma options align=mac68k
  542. #endif
  543. struct SCStatus {
  544.     Fixed                        scStartTime;
  545.     Fixed                        scEndTime;
  546.     Fixed                        scCurrentTime;
  547.     Boolean                        scChannelBusy;
  548.     Boolean                        scChannelDisposed;
  549.     Boolean                        scChannelPaused;
  550.     Boolean                        scUnused;
  551.     unsigned long                scChannelAttributes;
  552.     long                        scCPULoad;
  553. };
  554. #if defined(powerc) || defined(__powerc)
  555. #pragma options align=reset
  556. #endif
  557.  
  558. typedef struct SCStatus SCStatus;
  559.  
  560. typedef SCStatus *SCStatusPtr;
  561.  
  562. #if defined(powerc) || defined (__powerc)
  563. #pragma options align=mac68k
  564. #endif
  565. struct AudioSelection {
  566.     long                        unitType;
  567.     Fixed                        selStart;
  568.     Fixed                        selEnd;
  569. };
  570. #if defined(powerc) || defined(__powerc)
  571. #pragma options align=reset
  572. #endif
  573.  
  574. typedef pascal void (*FilePlayCompletionProcPtr)(SndChannelPtr chan);
  575.  
  576. enum {
  577.     uppFilePlayCompletionProcInfo = kPascalStackBased
  578.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SndChannelPtr)))
  579. };
  580.  
  581. #if USESROUTINEDESCRIPTORS
  582. typedef UniversalProcPtr FilePlayCompletionUPP;
  583.  
  584. #define CallFilePlayCompletionProc(userRoutine, chan)        \
  585.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppFilePlayCompletionProcInfo, (chan))
  586. #define NewFilePlayCompletionProc(userRoutine)        \
  587.         (FilePlayCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppFilePlayCompletionProcInfo, GetCurrentISA())
  588. #else
  589. typedef FilePlayCompletionProcPtr FilePlayCompletionUPP;
  590.  
  591. #define CallFilePlayCompletionProc(userRoutine, chan)        \
  592.         (*(userRoutine))((chan))
  593. #define NewFilePlayCompletionProc(userRoutine)        \
  594.         (FilePlayCompletionUPP)(userRoutine)
  595. #endif
  596.  
  597. typedef struct AudioSelection AudioSelection;
  598.  
  599. typedef AudioSelection *AudioSelectionPtr;
  600.  
  601. #if defined(powerc) || defined (__powerc)
  602. #pragma options align=mac68k
  603. #endif
  604. struct SndDoubleBuffer {
  605.     long                        dbNumFrames;
  606.     long                        dbFlags;
  607.     long                        dbUserInfo[2];
  608.     char                        dbSoundData[1];
  609. };
  610. #if defined(powerc) || defined(__powerc)
  611. #pragma options align=reset
  612. #endif
  613.  
  614. typedef struct SndDoubleBuffer SndDoubleBuffer;
  615.  
  616. typedef SndDoubleBuffer *SndDoubleBufferPtr;
  617.  
  618. typedef pascal void (*SndDoubleBackProcPtr)(SndChannelPtr channel, SndDoubleBufferPtr doubleBufferPtr);
  619.  
  620. enum {
  621.     uppSndDoubleBackProcInfo = kPascalStackBased
  622.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SndChannelPtr)))
  623.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SndDoubleBufferPtr)))
  624. };
  625.  
  626. #if USESROUTINEDESCRIPTORS
  627. typedef UniversalProcPtr SndDoubleBackUPP;
  628.  
  629. #define CallSndDoubleBackProc(userRoutine, channel, doubleBufferPtr)        \
  630.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSndDoubleBackProcInfo, (channel), (doubleBufferPtr))
  631. #define NewSndDoubleBackProc(userRoutine)        \
  632.         (SndDoubleBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSndDoubleBackProcInfo, GetCurrentISA())
  633. #else
  634. typedef SndDoubleBackProcPtr SndDoubleBackUPP;
  635.  
  636. #define CallSndDoubleBackProc(userRoutine, channel, doubleBufferPtr)        \
  637.         (*(userRoutine))((channel), (doubleBufferPtr))
  638. #define NewSndDoubleBackProc(userRoutine)        \
  639.         (SndDoubleBackUPP)(userRoutine)
  640. #endif
  641.  
  642. #if defined(powerc) || defined (__powerc)
  643. #pragma options align=mac68k
  644. #endif
  645. struct SndDoubleBufferHeader {
  646.     short                        dbhNumChannels;
  647.     short                        dbhSampleSize;
  648.     short                        dbhCompressionID;
  649.     short                        dbhPacketSize;
  650.     Fixed                        dbhSampleRate;
  651.     SndDoubleBufferPtr            dbhBufferPtr[2];
  652.     SndDoubleBackUPP            dbhDoubleBack;
  653. };
  654. #if defined(powerc) || defined(__powerc)
  655. #pragma options align=reset
  656. #endif
  657.  
  658. typedef struct SndDoubleBufferHeader SndDoubleBufferHeader;
  659.  
  660. typedef SndDoubleBufferHeader *SndDoubleBufferHeaderPtr;
  661.  
  662. #if defined(powerc) || defined (__powerc)
  663. #pragma options align=mac68k
  664. #endif
  665. struct SndDoubleBufferHeader2 {
  666.     short                        dbhNumChannels;
  667.     short                        dbhSampleSize;
  668.     short                        dbhCompressionID;
  669.     short                        dbhPacketSize;
  670.     Fixed                        dbhSampleRate;
  671.     SndDoubleBufferPtr            dbhBufferPtr[2];
  672.     SndDoubleBackUPP            dbhDoubleBack;
  673.     OSType                        dbhFormat;
  674. };
  675. #if defined(powerc) || defined(__powerc)
  676. #pragma options align=reset
  677. #endif
  678.  
  679. typedef struct SndDoubleBufferHeader2 SndDoubleBufferHeader2;
  680.  
  681. typedef SndDoubleBufferHeader2 *SndDoubleBufferHeader2Ptr;
  682.  
  683. #ifdef __cplusplus
  684. extern "C" {
  685. #endif
  686.  
  687. extern pascal OSErr SndDoCommand(SndChannelPtr chan, const SndCommand *cmd, Boolean noWait)
  688.  ONEWORDINLINE(0xA803);
  689. extern pascal OSErr SndDoImmediate(SndChannelPtr chan, const SndCommand *cmd)
  690.  ONEWORDINLINE(0xA804);
  691. extern pascal OSErr SndNewChannel(SndChannelPtr *chan, short synth, long init, SndCallBackUPP userRoutine)
  692.  ONEWORDINLINE(0xA807);
  693. extern pascal OSErr SndDisposeChannel(SndChannelPtr chan, Boolean quietNow)
  694.  ONEWORDINLINE(0xA801);
  695. extern pascal OSErr SndPlay(SndChannelPtr chan, Handle sndHdl, Boolean async)
  696.  ONEWORDINLINE(0xA805);
  697. extern pascal OSErr SndAddModifier(SndChannelPtr chan, Ptr modifier, short id, long init)
  698.  ONEWORDINLINE(0xA802);
  699. extern pascal OSErr SndControl(short id, SndCommand *cmd)
  700.  ONEWORDINLINE(0xA806);
  701. extern pascal void SetSoundVol(short level);
  702.  
  703. #if USES68KINLINES
  704. #pragma parameter  GetSoundVol(__A0)
  705. #endif
  706. extern pascal void GetSoundVol(short *level)
  707.  THREEWORDINLINE(0x4218, 0x10B8, 0x0260);
  708. extern pascal NumVersion SndSoundManagerVersion(void)
  709.  FOURWORDINLINE(0x203C, 0x000C, 0x0008, 0xA800);
  710. extern pascal OSErr SndStartFilePlay(SndChannelPtr chan, short fRefNum, short resNum, long bufferSize, void *theBuffer, AudioSelectionPtr theSelection, FilePlayCompletionUPP theCompletion, Boolean async)
  711.  FOURWORDINLINE(0x203C, 0x0D00, 0x0008, 0xA800);
  712. extern pascal OSErr SndPauseFilePlay(SndChannelPtr chan)
  713.  FOURWORDINLINE(0x203C, 0x0204, 0x0008, 0xA800);
  714. extern pascal OSErr SndStopFilePlay(SndChannelPtr chan, Boolean quietNow)
  715.  FOURWORDINLINE(0x203C, 0x0308, 0x0008, 0xA800);
  716. extern pascal OSErr SndChannelStatus(SndChannelPtr chan, short theLength, SCStatusPtr theStatus)
  717.  FOURWORDINLINE(0x203C, 0x0010, 0x0008, 0xA800);
  718. extern pascal OSErr SndManagerStatus(short theLength, SMStatusPtr theStatus)
  719.  FOURWORDINLINE(0x203C, 0x0014, 0x0008, 0xA800);
  720. extern pascal void SndGetSysBeepState(short *sysBeepState)
  721.  FOURWORDINLINE(0x203C, 0x0018, 0x0008, 0xA800);
  722. extern pascal OSErr SndSetSysBeepState(short sysBeepState)
  723.  FOURWORDINLINE(0x203C, 0x001C, 0x0008, 0xA800);
  724. extern pascal OSErr SndPlayDoubleBuffer(SndChannelPtr chan, SndDoubleBufferHeaderPtr theParams)
  725.  FOURWORDINLINE(0x203C, 0x0020, 0x0008, 0xA800);
  726. extern pascal NumVersion MACEVersion(void)
  727.  FOURWORDINLINE(0x203C, 0x0000, 0x0010, 0xA800);
  728. extern pascal void Comp3to1(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  729.  FOURWORDINLINE(0x203C, 0x0004, 0x0010, 0xA800);
  730. extern pascal void Exp1to3(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  731.  FOURWORDINLINE(0x203C, 0x0008, 0x0010, 0xA800);
  732. extern pascal void Comp6to1(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  733.  FOURWORDINLINE(0x203C, 0x000C, 0x0010, 0xA800);
  734. extern pascal void Exp1to6(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  735.  FOURWORDINLINE(0x203C, 0x0010, 0x0010, 0xA800);
  736.  
  737. /*Sound Manager 3.0 and later calls*/
  738.  
  739. extern pascal OSErr GetSysBeepVolume(long *level)
  740.  FOURWORDINLINE(0x203C, 0x0224, 0x0018, 0xA800);
  741. extern pascal OSErr SetSysBeepVolume(long level)
  742.  FOURWORDINLINE(0x203C, 0x0228, 0x0018, 0xA800);
  743. extern pascal OSErr GetDefaultOutputVolume(long *level)
  744.  FOURWORDINLINE(0x203C, 0x022C, 0x0018, 0xA800);
  745. extern pascal OSErr SetDefaultOutputVolume(long level)
  746.  FOURWORDINLINE(0x203C, 0x0230, 0x0018, 0xA800);
  747. extern pascal OSErr GetSoundHeaderOffset(Handle sndHandle, long *offset)
  748.  FOURWORDINLINE(0x203C, 0x0404, 0x0018, 0xA800);
  749. #ifdef __cplusplus
  750. }
  751. #endif
  752.  
  753. #endif
  754.  
  755.